//package com.zmn.plat.business.impl.oneprice;
//
//import java.util.List;
//import java.util.Objects;
//import java.util.Optional;
//import java.util.stream.Collectors;
//
//import com.zmn.common.constant.GlobalConsts;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Service;
//import org.springframework.transaction.annotation.Transactional;
//
//import com.zmn.common.utils.date.DateUtil;
//import com.zmn.common.utils.number.NumberUtil;
//import com.zmn.common.utils.string.StringUtil;
//import com.zmn.plat.business.interfaces.oneprice.ServCityPriceBService;
//import com.zmn.plat.manager.dictionary.OnePriceDict;
//import com.zmn.plat.model.entity.area.BaseArea;
//import com.zmn.plat.model.entity.oneprice.*;
//import com.zmn.plat.services.interfaces.area.BaseAreaService;
//import com.zmn.plat.services.interfaces.oneprice.ServCityPriceLogService;
//import com.zmn.plat.services.interfaces.oneprice.ServCityPriceServService;
//import com.zmn.plat.services.interfaces.oneprice.ServCityPriceService;
//
///**
// * The type Serv city price b service.
// *
// * @author xiangjunming
// * @since 2019/07/05 14:42:21
// */
//@Service
//@Slf4j
//public class ServCityPriceBServiceImpl implements ServCityPriceBService {
//
//    @Autowired
//    private ServCityPriceService priceService;
//
//    @Autowired
//    private ServCityPriceLogService logService;
//
//    @Autowired
//    private BaseAreaService areaService;
//
//    @Autowired
//    private ServCityPriceServService servCityPriceServService;
//
//    @Override
//    @Transactional(rollbackFor = Exception.class)
//    public void addEdit(ServCityPriceAddEditVO vo) {
//
//        try {
//            vo.getCityList().forEach(item -> {
//
//                String[] split = item.split("-");
//                if (split.length < 2) {
//                    throw new IllegalArgumentException("param cityList is error");
//                }
//
//                int provinceId = Integer.valueOf(split[0]);
//                Integer cityId = split[1].equals("0") ? null : Integer.valueOf(split[1]);
//                String provinceName = null;
//                String cityName = null;
//                if (provinceId == 0 && cityId == 0) {
//                    // 全国
//                    provinceName = "全国";
//                } else if (cityId == null) {
//                    // 全省
//                    BaseArea province = areaService.findByKey(provinceId);
//                    provinceName = province.getName();
//                } else {
//                    // 全市
//                    BaseArea province = areaService.findByKey(provinceId);
//                    BaseArea city = areaService.findByKey(cityId);
//
//                    provinceName = Optional.ofNullable(province).map(p -> p.getName()).orElse(null);
//                    cityName = Optional.ofNullable(city).map(p -> p.getName()).orElse(null);
//                }
//
//                ServCityPriceQuery priceQuery = new ServCityPriceQuery();
//                priceQuery.setProvinceId(provinceId);
//                priceQuery.setCityId(cityId);
//                priceQuery.setType(vo.getType());
//                List<ServCityPrice> servCityPrices = priceService.listByQuery(priceQuery);
//
//                Integer relationId = null;
//
//                // 检查是否存在该城市配置
//                if (servCityPrices == null || servCityPrices.size() == 0) {
//                    // 不存在新增
//                    ServCityPrice servCityPrice = new ServCityPrice();
//                    servCityPrice.setType(vo.getType());
//                    servCityPrice.setPayType(vo.getPayType());
//                    // servCityPrice.setPriceDiscount(vo.getPriceDiscount());
//                    servCityPrice.setStatus(vo.getStatus());
//                    servCityPrice.setProvinceId(provinceId);
//                    servCityPrice.setCityId(cityId);
//                    servCityPrice.setProvinceName(provinceName);
//                    servCityPrice.setCityName(cityName);
//
//                    servCityPrice.setDepositStatus(vo.getDepositStatus());
//                    Integer amountFen = Objects.isNull(vo.getDeposit()) ? null : NumberUtil.convertMoneyToFen(vo.getDeposit());
//                    servCityPrice.setDeposit(amountFen);
//
//                    // 新增时填充操作人
//                    servCityPrice.setCreater(vo.getOperatorName());
//                    servCityPrice.setUpdater(vo.getOperatorName());
//
//                    priceService.insert(servCityPrice);
//                    relationId = servCityPrice.getRelationId();
//
//                    // 操作日志
//                    ServCityPriceLog priceLog = new ServCityPriceLog();
//                    priceLog.setRelationId(servCityPrice.getRelationId());
//                    priceLog.setAbutmenterType((byte)1);
//                    priceLog.setAbutmenterId(vo.getOperatorId());
//                    priceLog.setAbutmenter(vo.getOperatorName());
//                    priceLog.setContent(String.format("新增执行城市: %s", cityName));
//
//                    logService.insert(priceLog);
//                } else {
//                    // 存在城市修改
//                    ServCityPrice dbCityPrice = servCityPrices.get(0);
//                    relationId = dbCityPrice.getRelationId();
//                    ServCityPrice servCityPrice = new ServCityPrice();
//                    servCityPrice.setRelationId(relationId);
//                    servCityPrice.setPayType(vo.getPayType());
//                    // servCityPrice.setPriceDiscount(vo.getPriceDiscount());
//                    servCityPrice.setStatus(vo.getStatus());
//                    servCityPrice.setProvinceName(provinceName);
//                    servCityPrice.setCityName(cityName);
//
//                    // 更新人，更新时间修改
//                    servCityPrice.setUpdater(vo.getOperatorName());
//                    servCityPrice.setUpdateTime(DateUtil.getNow());
//
//                    Integer amountFen = Objects.isNull(vo.getDeposit()) ? null : NumberUtil.convertMoneyToFen(vo.getDeposit());
//
//                    servCityPrice.setDeposit(amountFen);
//                    servCityPrice.setDepositStatus(vo.getDepositStatus());
//                    //支付方式不为“下单必须支付”清空定金状态
//                    if(!Objects.equals(servCityPrice.getPayType(),GlobalConsts.NO)){
//                        servCityPrice.setDepositStatus(null);
//                    }
//                    String changeContent = getChangeContent(dbCityPrice, servCityPrice);
//
//                    priceService.updateByKey(servCityPrice);
//
//                    if (StringUtil.isNotBlank(changeContent)) {
//                        // 操作日志
//                        ServCityPriceLog priceLog = new ServCityPriceLog();
//                        priceLog.setRelationId(servCityPrice.getRelationId());
//                        priceLog.setAbutmenterType((byte)1);
//                        priceLog.setAbutmenterId(vo.getOperatorId());
//                        priceLog.setAbutmenter(vo.getOperatorName());
//                        priceLog.setContent(changeContent);
//
//                        logService.insert(priceLog);
//                    }
//                }
//                // 初始化 城市一口价价与服务分类的关系
//                initServCityPriceServ(vo.getServCategList(), relationId, vo.getOperatorName());
//            });
//        } catch (Exception e) {
//            log.error("保存失败.",e);
//
//        }
//    }
//
//    /**
//     * 描述: 初始化 城市一口价价与服务分类的关系 （先删后增）
//     *
//     * @param servCategList
//     *            服务分类id
//     * @param relationId
//     *            城市价 id
//     * @param operator
//     *            操作人
//     * @author wangjie
//     * @since 2019/9/6
//     **/
//    private void initServCityPriceServ(List<Integer> servCategList, Integer relationId, String operator) {
//
//        servCityPriceServService.deleteByRelationId(relationId);
//
//        List<ServCityPriceServ> servCityPriceServs =
//            servCategList.stream().map(mm -> ServCityPriceServ.builder().relationId(relationId).servCategId(mm).creater(operator).createTime(DateUtil.getNow()).build()).collect(Collectors.toList());
//        servCityPriceServService.insertServCityPriceServList(servCityPriceServs, operator);
//
//    }
//
//    /**
//     * 变更操作内容
//     *
//     * @param dbCityPrice
//     * @param servCityPrice
//     * @return
//     */
//    private String getChangeContent(ServCityPrice dbCityPrice, ServCityPrice servCityPrice) {
//        StringBuilder sb = new StringBuilder();
//        if (!Objects.equals(dbCityPrice.getPayType(),servCityPrice.getPayType())) {
//            String changePayType = String.format("变更支付方式: \"%s\" -> \"%s\"", OnePriceDict.getPayType(dbCityPrice.getPayType()), OnePriceDict.getPayType(servCityPrice.getPayType()));
//            sb.append(changePayType);
//        }
//        // if (!dbCityPrice.getPriceDiscount().equals(servCityPrice.getPriceDiscount())) {
//        //     String changePriceDiscount =
//        //         String.format("变更一口价优惠: \"%s\" -> \"%s\"", OnePriceDict.getPriceDiscount(dbCityPrice.getPriceDiscount()), OnePriceDict.getPriceDiscount(servCityPrice.getPriceDiscount()));
//        //     if (sb.length() > 0) {
//        //         sb.append("</br>");
//        //     }
//        //     sb.append(changePriceDiscount);
//        // }
//        if (!Objects.equals(dbCityPrice.getStatus(),servCityPrice.getStatus())) {
//            String changeStatus = String.format("变更状态: \"%s\" -> \"%s\"", OnePriceDict.getStatus(dbCityPrice.getStatus()), OnePriceDict.getStatus(servCityPrice.getStatus()));
//            if (sb.length() > 0) {
//                sb.append("</br>");
//            }
//            sb.append(changeStatus);
//        }
//        return sb.toString();
//    }
//
//}
